// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
//
// #include "Address Book(SeqList)/SeqList.h"
//
// #define MAXSIZE 100
// typedef int ElemType;
//
// typedef struct Stack {
//     ElemType data[MAXSIZE];
//     int top;
// } Stack;
//
// // 初始化栈
// void InitStack(Stack* S) {
//     S->top = -1;
// }
//
// // 判断栈空
// bool StackEmpty(Stack* S) {
//     return S->top == -1;
// }
//
// // 判断栈满
// bool StackOverflow(Stack* S) {
//     return S->top == MAXSIZE - 1;
// }
//
// // 入栈
// void Push(Stack* S, ElemType value) {
//     if (!StackOverflow(S)) {
//         S->data[++S->top] = value;
//     } else {
//         printf("栈满，无法入栈\n");
//     }
// }
//
// // 出栈
// ElemType Pop(Stack* S) {
//     if (!StackEmpty(S)) {
//         return S->data[S->top--];
//     } else {
//         printf("栈空，无法出栈\n");
//         return -1; // 错误码
//     }
// }
//
// // 打印栈（调试用）
// void PrintStack(Stack* S) {
//     for (int i = 0; i <= S->top; i++) {
//         printf("%d ", S->data[i]);
//     }
//     printf("\n");
// }
//
// // 用栈模拟入队
// void EnQueue(Stack* S1, Stack* S2, ElemType value) {
//     if (StackOverflow(S1) && !StackEmpty(S1)) {
//         // S1满且非空时，迁移数据到S2
//         while (!StackEmpty(S1)) {
//             Push(S2, Pop(S1));
//         }
//     }
//     if (StackOverflow(S1)) {
//         printf("队列已满\n");
//         return;
//     }
//     Push(S1, value);
// }
//
// // 用栈模拟出队
// ElemType DeQueue(Stack* S1, Stack* S2) {
//     if (StackEmpty(S2)) {
//         // S2为空时，将S1的数据迁移到S2
//         while (!StackEmpty(S1)) {
//             Push(S2, Pop(S1));
//         }
//     }
//     if (StackEmpty(S2)) {
//         printf("队列为空\n");
//         return -1; // 错误码
//     }
//     return Pop(S2);
// }
//
// // 判断队列是否为空
// bool QueueEmpty(Stack* S1, Stack* S2) {
//     return StackEmpty(S1) && StackEmpty(S2);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     Stack S1, S2;
//     InitStack(&S1);
//     InitStack(&S2);
//
//     // 测试入队
//     for (int i = 1; i <= 5; i++) {
//         EnQueue(&S1, &S2, i);
//     }
//     printf("入队后S1: ");
//     PrintStack(&S1);
//
//     // 测试出队
//     printf("出队元素: ");
//     while (!QueueEmpty(&S1, &S2)) {
//         printf("%d ", DeQueue(&S1, &S2));
//     }
//     printf("\n");
//
//     return 0;
// }